// 导入路由对象
import router from "./router";
// 导入store
import store from '@/store'
// 导入提示信息
import { Message } from 'element-ui'
// 导入进度条
import NProgress from "nprogress";
import 'nprogress/nprogress.css'
// 创建白名单
const WHILE_LIST = ['/404', '/login']
router.beforeEach(async (to, from, next) => {
  // 开启进度条
  NProgress.start()
  const token = store.getters.token
  if (token) {
    if (to.path === '/login') {
      Message.info('你已登录,不需要再次登录')
      next('/')
      NProgress.done()
    } else {
      // console.log(1111);
      // 判断是否存在用户信息
      const userInfo = store.getters.userInfo
      if (!userInfo.username) {
        // 得到用户信息
      const userInfo = await store.dispatch('user/getUserInfo')
        // 得到登录用户的动态路由
        const newRoutes = await store.dispatch('permission/getRoutes', userInfo.roles.menus)
        // 将动态路由添加到路由对象中
        // router.addRoutes(newRoutes)
        router.addRoutes([...newRoutes, { path: '*', redirect: '/404', hidden: true }])
        // 重新进入当前路由
        return next(to.path)
      }
      next()
    }
  }
  // 无token
  else {
    //  不存在
    //    判断访问的页面是在白名单中
    if (WHILE_LIST.indexOf(to.path) !== -1) {
      //      在：向下执行
      next()
    } else {
      //      不在：跳转到登录页面
      Message.error('对不起，您还没有登录')
      // 将之前的路径保存起来
      next(`/login?_redirect=${to.path}`)
    }
  }
})
// 后置守卫
router.afterEach((to, from) => {
  NProgress.done()
})